package de.hatraco.funderberg.blackjack.utils;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

//import javax.swing.SwingConstants;
import javax.swing.Timer;

import de.hatraco.funderberg.blackjack.controller.Ctrl_Dialogs;
import de.hatraco.funderberg.blackjack.controller.Ctrl_MainView;
import de.hatraco.funderberg.blackjack.controller.Main_Controller;
import de.hatraco.funderberg.blackjack.data.GraphicsBlackJack;
import de.hatraco.funderberg.blackjack.model.Deck;
import de.hatraco.funderberg.blackjack.model.Game;
//import de.hatraco.funderberg.blackjack.views.InfoDialog;
import de.hatraco.funderberg.blackjack.views.MainView;
import de.hatraco.funderberg.blackjack.views.StartDialog;
import de.hatraco.funderberg.blackjack.views.StartstackDialog;


public class TimerActionListener implements ActionListener {
	
	private Deck deck;
	private Game game;
	private MainView mainview;
	private StartDialog startdialog;
	private StartstackDialog startstackdialog;
	private GraphicsBlackJack img; 
	
	private int mc_x;
	private int mc_y;
	private int msc_x;
	private int msc_y;
	private int mdc_x;
	private int mdc_y;
	//private int cb_x;
	//private int cb_y;
	private int ms_c;
	private int chance;
		
	public TimerActionListener() {
		this.deck = Deck.getInstance();
		this.game = Game.getInstance();
		this.mainview = MainView.getInstanceWindow();
		this.startdialog = StartDialog.getInstance();
		this.startstackdialog = StartstackDialog.getInstance();
		this.img = GraphicsBlackJack.getInstance();
		this.ms_c = (int) Math.round(52 * img.getResizefactor());
	}
		
	public void actionPerformed(ActionEvent e) {
		
		//Timer führen ein ActionEvent kontinuierlich aus, bis der Vorgang akiv beendet wird. Das Intervall wird beim Erstellen des Timers festgelegt.
		//In der Regel werden die Vorgänge hier über Counter gesteuert
		
		//---Timer aus Main_Controller Anfang ---
		
		//Timer_dealcards
		if (e.getSource() == (Timer) Main_Controller.getInstance().getTimer_dealcards()) {
			//Solange der Counter kleiner ist als die Anzahl der aktiven Spieler wird per dealAcard die 1. Karte an die Spieler ausgeteilt
			if (Main_Controller.getInstance().getCounter_dealcards() < (game.getPl_quant() - game.getPl_outofstack())) {
				Main_Controller.getInstance().dealAcard();
				Main_Controller.getInstance().setCounter_dealcards((Main_Controller.getInstance().getCounter_dealcards() + 1));
			//Haben alle Spieler eine Karte (Counter = aktive Spieler) bekommt der Dealer eine Karte	
			} else if (Main_Controller.getInstance().getCounter_dealcards() == (game.getPl_quant() - game.getPl_outofstack())) {
				Main_Controller.getInstance().addDealerCard();
				Main_Controller.getInstance().setCounter_dealcards((Main_Controller.getInstance().getCounter_dealcards() + 1));
				game.setPl_on(0);
			//Liegt der Counter zwischen "Anzahl aktive Spieler" *1 und *2, wird die 2. Karte an die Spieler ausgeteilt	
			} else if(Main_Controller.getInstance().getCounter_dealcards() > (game.getPl_quant() - game.getPl_outofstack()) && Main_Controller.getInstance().getCounter_dealcards() <= ((game.getPl_quant() - game.getPl_outofstack()) * 2)) {
				Main_Controller.getInstance().dealAcard();
				Main_Controller.getInstance().setCounter_dealcards((Main_Controller.getInstance().getCounter_dealcards() + 1));
			//Liegt der Counter über "Anzahl aktive Spieler" *2 ist Schluss und startPlay wird aufgerufen
			} else {
				Main_Controller.getInstance().getTimer_dealcards().stop();
				Main_Controller.getInstance().startPlay();
			}
		} 
		//Timer_dealersmove
		else if (e.getSource() == (Timer) Main_Controller.getInstance().getTimer_dealersmove()) {
			//Solange der Dealer weniger als 17 Punkte Hand, bekommt er neue Karten
			if (game.getDealer().getHand().getValue() < 17) {
				Main_Controller.getInstance().addDealerCard();
			//bei 17 oder mehr ist Schluss und die Ausgabe der Ergebnisse wird gestartet	
			} else {
				Main_Controller.getInstance().getTimer_dealersmove().stop();
				Main_Controller.getInstance().setDealerResult();
				Main_Controller.getInstance().showResults();
			}
		}
		//TODO kann vermutlich ganz raus!
		//Timer_doubledown
//		else if (e.getSource() == (Timer) Main_Controller.getInstance().getTimer_doubledown()) {
//			if (Main_Controller.getInstance().getCounter_doubledown() == 0) {
//				Main_Controller.getInstance().addCard();
//				Main_Controller.getInstance().setCounter_doubledown((Main_Controller.getInstance().getCounter_doubledown() + 1));
//			} else {
//				Main_Controller.getInstance().getTimer_doubledown().stop();
//				Main_Controller.getInstance().setResult();
//				//Main_Controller.getInstance().nextPlayer();
//			}
//		}
		//---Timer aus Main_Controller Ende ---
		
		//---Timer aus Ctrl_Mainview Anfang ---
		
		//timerSetBust
		//Stellt Bust des Spielers grafisch dar
		else if (e.getSource() == (Timer) Ctrl_MainView.getInstance().getTimerSetBust()) {
			//Prüft, ob eine Splithand gespielt wird ...
			if (game.getPlayers().get(game.getPl_on()).isSplitActive() == true) {
				//Im ersten Timerdurchlauf wird Value = "BUST!" gesetzt, das "DealerWins"-Label aktiviert und der Counter erhöht
				if (Ctrl_MainView.getInstance().getCounterSetBust() == 0) {
					mainview.getPlayers().get(game.getPl_on()).getSplitvalue().setText("BUST!");
					mainview.getContent().moveToFront(mainview.getPlayers().get(game.getPl_on()).getSplit_dealerwins());
					mainview.getPlayers().get(game.getPl_on()).getSplit_dealerwins().setVisible(true);
					Ctrl_MainView.getInstance().setCounterSetBust(Ctrl_MainView.getInstance().getCounterSetBust() + 1);
				//Im zweiten Durchlauf wird der Timer gestoppt und die Methode setResult aufgerufen
				} else {
					Ctrl_MainView.getInstance().getTimerSetBust().stop();
					Main_Controller.getInstance().setResult();
				}
			//... wird keine Splithand gespielt, wird alles auf die Mainhand bezogen 	
			} else {
				//Im ersten Timerdurchlauf wird Value = "BUST!" gesetzt, das "DealerWins"-Label aktiviert und der Counter erhöht
				if (Ctrl_MainView.getInstance().getCounterSetBust() == 0) {
					mainview.getPlayers().get(game.getPl_on()).getValue().setText("BUST!");
					mainview.getContent().moveToFront(mainview.getPlayers().get(game.getPl_on()).getDealerwins());
					mainview.getPlayers().get(game.getPl_on()).getDealerwins().setVisible(true);
					Ctrl_MainView.getInstance().setCounterSetBust(Ctrl_MainView.getInstance().getCounterSetBust() + 1);
				//Im zweiten Durchlauf wird der Timer gestoppt und die Methode setResult aufgerufen
				} else {
					Ctrl_MainView.getInstance().getTimerSetBust().stop();
					Main_Controller.getInstance().setResult();
				}
			}	
		}
		//timerMoveCard
		//"Bewegt" die Kartenrückseite zur Mainhand durch 10-mailiges Neu-Positionieren
		else if (e.getSource() == (Timer) Ctrl_MainView.getInstance().getTimerMoveCard()) {
			//Prüft, die Position des Stapels zum Spieler. Ist der Stapel weiter rechts, muss die Karte nach links bewegt werden und umgekehrt
			if (mainview.getCard_b().getX() > Ctrl_MainView.getInstance().getA_mc()) {
				//Berechnet den neuen X-Wert der Kartenrückseite:
				//Nach links: Aktuelle Pos - (((Aktuelle Pos - Endpos) / 10) * Counter + 1)
				mc_x = mainview.getCard_b().getX() - (((mainview.getCard_b().getX() - Ctrl_MainView.getInstance().getA_mc())/10)*(Ctrl_MainView.getInstance().getCounterMoveCard() + 1));
			} else {
				//Nach rechts: Aktuelle Pos + (((Aktuelle Pos - Endpos) / 10) * Counter + 1)
				mc_x = mainview.getCard_b().getX() + (((Ctrl_MainView.getInstance().getA_mc() - mainview.getCard_b().getX())/10)*(Ctrl_MainView.getInstance().getCounterMoveCard() + 1));
			}
			//Berechnet den neuen Y-Wert der Kartenrückseite (Richtung immer nach unten):
			//Aktuelle Pos + (((Endpos - Aktuelle Pos) / 10) * Counter + 1)
			mc_y = mainview.getCard_b().getY() + (((Ctrl_MainView.getInstance().getB_mc() - mainview.getCard_b().getY())/10)*(Ctrl_MainView.getInstance().getCounterMoveCard() + 1));
			//Setzt die Kartenrückseite in der View ganz in den Vordergrund
			mainview.getContent().moveToFront(mainview.getCard_b());
			//Setzt die neu berechneten Pos-Daten
			mainview.getCard_b().setBounds(mc_x, mc_y, img.getCback().getIconWidth(), img.getCback().getIconHeight());
			//Erhöht den Counter
			Ctrl_MainView.getInstance().setCounterMoveCard(Ctrl_MainView.getInstance().getCounterMoveCard() + 1);
			//Ist der Counter bei 10, dann stoppt der Timer und die Kartenrückseite wird wieder auf dem Stapel neben dem Dealer platziert
			if (Ctrl_MainView.getInstance().getCounterMoveCard() == 10) {
				Ctrl_MainView.getInstance().getTimerMoveCard().stop();
				mainview.getCard_b().setVisible(false);
				mainview.getCard_b().setBounds(Ctrl_MainView.getInstance().getX_cb(), Ctrl_MainView.getInstance().getY_cb(), img.getCback().getIconWidth(), img.getCback().getIconHeight());
				mainview.getContent().moveToFront(mainview.getCard_b());
				mainview.getCard_b().setVisible(true);
				//Zum Schluss wird die neu gezogene Karte beim Spieler über showCard angezeigt
				Ctrl_MainView.getInstance().showCard(deck.getDeck().get(game.getCardcount()).getImg());
			}
		}
		//timerMoveSplitcard
		//"Bewegt" die Kartenrückseite zur Splithand durch 10-mailiges Neu-Positionieren
		else if (e.getSource() == (Timer) Ctrl_MainView.getInstance().getTimerMoveSplitcard()) {
			//Prüft, die Position des Stapels zum Spieler. Ist der Stapel weiter rechts, muss die Karte nach links bewegt werden und umgekehrt
			if (mainview.getCard_b().getX() > Ctrl_MainView.getInstance().getA_msc()) {
				//Berechnet den neuen X-Wert der Kartenrückseite:
				//Nach links: Aktuelle Pos - (((Aktuelle Pos - Endpos) / 10) * Counter + 1)
				msc_x = mainview.getCard_b().getX() - (((mainview.getCard_b().getX() - Ctrl_MainView.getInstance().getA_msc())/10)*(Ctrl_MainView.getInstance().getCounterMoveCard() + 1));
			} else {
				//Nach rechts: Aktuelle Pos + (((Aktuelle Pos - Endpos) / 10) * Counter + 1)
				msc_x = mainview.getCard_b().getX() + (((Ctrl_MainView.getInstance().getA_msc() - mainview.getCard_b().getX())/10)*(Ctrl_MainView.getInstance().getCounterMoveCard() + 1));
			}
			//Berechnet den neuen Y-Wert der Kartenrückseite (Richtung immer nach unten):
			//Aktuelle Pos + (((Endpos - Aktuelle Pos) / 10) * Counter + 1)
			msc_y = mainview.getCard_b().getY() + (((Ctrl_MainView.getInstance().getB_msc() - mainview.getCard_b().getY())/10)*(Ctrl_MainView.getInstance().getCounterMoveCard() + 1));
			//Setzt die Kartenrückseite in der View ganz in den Vordergrund
			mainview.getContent().moveToFront(mainview.getCard_b());
			//Setzt die neu berechneten Pos-Daten
			mainview.getCard_b().setBounds(msc_x, msc_y, img.getCback().getIconWidth(), img.getCback().getIconHeight());
			//Erhöht den Counter
			Ctrl_MainView.getInstance().setCounterMoveSplitcard(Ctrl_MainView.getInstance().getCounterMoveSplitcard() + 1);
			//Ist der Counter bei 10, dann stoppt der Timer und die Kartenrückseite wird wieder auf dem Stapel neben dem Dealer platziert
			if (Ctrl_MainView.getInstance().getCounterMoveSplitcard() == 10) {
				Ctrl_MainView.getInstance().getTimerMoveSplitcard().stop();
				mainview.getCard_b().setVisible(false);
				mainview.getCard_b().setBounds(Ctrl_MainView.getInstance().getX_cb(), Ctrl_MainView.getInstance().getY_cb(), img.getCback().getIconWidth(), img.getCback().getIconHeight());
				mainview.getContent().moveToFront(mainview.getCard_b());
				mainview.getCard_b().setVisible(true);
				//Zum Schluss wird die neu gezogene Karte beim Spieler über showSplitcard angezeigt
				Ctrl_MainView.getInstance().showSplitcard(deck.getDeck().get(game.getCardcount()).getImg());
			}
		}
		//timerMoveDealercard
		//"Bewegt" die Kartenrückseite zur Dealerhand durch 5-mailiges Neu-Positionieren
		else if (e.getSource() == (Timer) Ctrl_MainView.getInstance().getTimerMoveDealercard()) {
			//Berechnet die neue Position der Kartenrückseite:
			//X = Aktuelle Pos - (((Aktuelle Pos - Endpos) / 5) * Counter + 1)
			mdc_x = mainview.getCard_b().getX() - (((mainview.getCard_b().getX() - Ctrl_MainView.getInstance().getA_mdc())/5)*(Ctrl_MainView.getInstance().getCounterMoveDealercard() + 1));
			//Y = Aktuelle Pos + (((Endpos - Aktuelle Pos) / 5) * Counter + 1)
			mdc_y = mainview.getCard_b().getY() + (((Ctrl_MainView.getInstance().getB_mdc() - mainview.getCard_b().getY())/5)*(Ctrl_MainView.getInstance().getCounterMoveDealercard() + 1));
			//Setzt die Kartenrückseite in der View ganz in den Vordergrund
			mainview.getContent().moveToFront(mainview.getCard_b());
			//Setzt die neu berechneten Pos-Daten
			mainview.getCard_b().setBounds(mdc_x, mdc_y, img.getCback().getIconWidth(), img.getCback().getIconHeight());
			//Erhöht den Counter
			Ctrl_MainView.getInstance().setCounterMoveDealercard(Ctrl_MainView.getInstance().getCounterMoveDealercard() + 1);
			//Ist der Counter bei 5, dann stoppt der Timer und die Kartenrückseite wird wieder auf dem Stapel neben dem Dealer platziert
			if (Ctrl_MainView.getInstance().getCounterMoveDealercard() == 5) {
				Ctrl_MainView.getInstance().getTimerMoveDealercard().stop();
				mainview.getCard_b().setVisible(false);
				mainview.getCard_b().setBounds(Ctrl_MainView.getInstance().getX_cb(), Ctrl_MainView.getInstance().getY_cb(), img.getCback().getIconWidth(), img.getCback().getIconHeight());
				mainview.getContent().moveToFront(mainview.getCard_b());
				mainview.getCard_b().setVisible(true);
				//Zum Schluss wird die neu gezogene Karte beim Dealer über showDealercard angezeigt
				Ctrl_MainView.getInstance().showDealerCard(deck.getDeck().get(game.getCardcount()).getImg());
			}
		}
		//timerShipDealer
		//"Bewegt" das "Dealer is up"-Schiff durch mehrmaliges Neu-Positionieren
		else if (e.getSource() == (Timer) Ctrl_MainView.getInstance().getTimerShipDealer()) {
			//Berechnet die neue X-Koordinate
			Ctrl_MainView.getInstance().setA_sd((int) Math.round(Ctrl_MainView.getInstance().getA_sd() + (16 * img.getResizefactor())));
			//Setzt die neue Position des Schiffs
			mainview.getShips_dealer().get(0).setBounds(
					Ctrl_MainView.getInstance().getA_sd(), 
					(int) Math.round(252 * img.getResizefactor()), 
					mainview.getShips_dealer().get(0).getWidth(), 
					mainview.getShips_dealer().get(0).getHeight()
			);
			//Erhöht den Counter
			Ctrl_MainView.getInstance().setCounterShipDealer(Ctrl_MainView.getInstance().getCounterShipDealer() + 1);
			//Ist der Counter = ms_c (= Schiff ist in der Mitte), dann pausiert die Bewegung für 1 Sekunde
			if (Ctrl_MainView.getInstance().getCounterShipDealer() == ms_c) {
				Ctrl_MainView.getInstance().getTimerShipDealer().setDelay(1000);
			}
			//Nach der Pause wird die Bewegung wieder aufgenommen
			else if (Ctrl_MainView.getInstance().getCounterShipDealer() == (ms_c + 1)) {
				Ctrl_MainView.getInstance().getTimerShipDealer().setDelay(5);
			}
			//Ist der Counter = ms_c * 2, dann stoppt der Timer, das Schiff wird deaktivert und wieder nach links gesetzt
			else if (Ctrl_MainView.getInstance().getCounterShipDealer() == (ms_c * 2)) {
				Ctrl_MainView.getInstance().getTimerShipDealer().stop();
				mainview.getShips_dealer().get(0).setVisible(false);
				mainview.getShips_dealer().get(0).setBounds(
						(int) Math.round(-500 * img.getResizefactor()), 
						(int) Math.round(252 * img.getResizefactor()), 
						mainview.getShips_dealer().get(0).getWidth(), 
						mainview.getShips_dealer().get(0).getHeight()
				);
				//Nach der Schiff-Bewegung spielt der Dealer
				Main_Controller.getInstance().dealersMove();
			}	
		}
		//timerShipPlayer
		//"Bewegt" das "Player X is up"-Schiff durch mehrmaliges Neu-Positionieren
		else if (e.getSource() == (Timer) Ctrl_MainView.getInstance().getTimerShipPlayer()) {
			//Berechnet die neue X-Koordinate
			Ctrl_MainView.getInstance().setA_sp((int) Math.round(Ctrl_MainView.getInstance().getA_sp() + (16 * img.getResizefactor())));
			//Setzt die neue Position des Schiffs
			mainview.getShips_players().get(game.getPl_on()).get(0).setBounds(
					Ctrl_MainView.getInstance().getA_sp(), 
					(int) Math.round(252 * img.getResizefactor()), 
					mainview.getShips_players().get(game.getPl_on()).get(0).getWidth(), 
					mainview.getShips_players().get(game.getPl_on()).get(0).getHeight()
			);
			//Erhöht den Counter
			Ctrl_MainView.getInstance().setCounterShipPlayer(Ctrl_MainView.getInstance().getCounterShipPlayer() + 1);
			//Ist der Counter = ms_c (= Schiff ist in der Mitte), dann pausiert die Bewegung für 1 Sekunde
			if (Ctrl_MainView.getInstance().getCounterShipPlayer() == ms_c) {
				Ctrl_MainView.getInstance().getTimerShipPlayer().setDelay(1000);
			}
			//Nach der Pause wird die Bewegung wieder aufgenommen
			else if (Ctrl_MainView.getInstance().getCounterShipPlayer() == (ms_c + 1)) {
				Ctrl_MainView.getInstance().getTimerShipPlayer().setDelay(8);
			}
			//Ist der Counter = ms_c * 2, dann stoppt der Timer, das Schiff wird deaktivert und wieder nach links gesetzt
			else if (Ctrl_MainView.getInstance().getCounterShipPlayer() == (ms_c * 2)) {
				Ctrl_MainView.getInstance().getTimerShipPlayer().stop();
				mainview.getShips_players().get(game.getPl_on()).get(0).setVisible(false);
				mainview.getShips_players().get(game.getPl_on()).get(0).setBounds(
						(int) Math.round(-500 * img.getResizefactor()), 
						(int) Math.round(252 * img.getResizefactor()), 
						mainview.getShips_players().get(game.getPl_on()).get(0).getWidth(), 
						mainview.getShips_players().get(game.getPl_on()).get(0).getHeight()
				);		
			}	
		}
		//timer_Clock
		//Aktualisiert die Anzeige der Uhrzeit
		else if (e.getSource() == (Timer) Ctrl_MainView.getInstance().getTimerClock()) {
			Ctrl_MainView.getInstance().updateClock();
		}
		//timer_Byebye
		//Beendet das Programm nach dem eingestellten Start-Delay (in der Zwischenzeit wird die ByeBye-Animation abgespielt)
		else if (e.getSource() == (Timer) Ctrl_MainView.getInstance().getTimerByeBye()) {
			System.exit(0);
			Ctrl_MainView.getInstance().getTimerByeBye().stop();
		}
		//---Timer aus Ctrl_Mainview Ende ---		
		
		//---Timer aus Ctrl_Dialogs Anfang ---
		
		//Timer_getTheStartstack2
		//Legt den Startstack der Spieler fest. Der Wert wird zufällig aus 6 möglichen Werten (50 - 300) gewählt.
		//Die Auswahl wird durch mehrmaliges, vorheriges Anzeigen von Zufallswerten animiert
		else if (e.getSource() == (Timer) Ctrl_Dialogs.getInstance().getTimer_getTheStartstack2()) {
			//Solange der Counter < 21 ist, wird ein zufälluger Wert gewählt und angezeigt ...
			if (Ctrl_Dialogs.getInstance().getCounter_getTheStartstack2() < 21) {
				//.. dabei wird das Delay kontinuierlich erhöht, die Animation wird dadurch verlangsamt
				Ctrl_Dialogs.getInstance().getTimer_getTheStartstack2().setDelay((Ctrl_Dialogs.getInstance().getCounter_getTheStartstack2() + 1)*10);
				//cahnce = Zufallswert zwischen 0 und 5
				chance = (int)(Math.random()*6);
				//Angezeigt wird der Wert an Position "chance" aus der Liste mit Startstacks (50 - 300)
				startstackdialog.getThestartstack().setText(String.valueOf(startstackdialog.getStartstacks()[chance]));
				//Erhöht den Counter
				Ctrl_Dialogs.getInstance().setCounter_getTheStartstack2((Ctrl_Dialogs.getInstance().getCounter_getTheStartstack2() + 1));
				//Ist der Counter = 20 wird das Delay erhöht, um eine Pause zu erzwingen
				if (Ctrl_Dialogs.getInstance().getCounter_getTheStartstack2() == 20) {
					Ctrl_Dialogs.getInstance().getTimer_getTheStartstack2().setDelay(1000);
				}
			}
			//Hat der Counter dann den Wert 21, wird der Stack der Spieler gleich dem letzten Zufallswert gesetzt und der Timer gestoppt
			else if (Ctrl_Dialogs.getInstance().getCounter_getTheStartstack2() == 21) {
				Ctrl_Dialogs.getInstance().getTimer_getTheStartstack2().stop();
				for (int i = 0; i < game.getPl_quant(); i++) {
					Main_Controller.getInstance().setStack(i, startstackdialog.getStartstacks()[chance]);
				}
				//getTheStartstack3 zeigt neue Texte im Fenster
				Ctrl_Dialogs.getInstance().getTheStartstack3();
			}
		}
		//Timer_startThegame
		//Aktiviert im Startfenster Texte und Buttons nach Ablauf des eingestellten Startdelays (Startanimation läuft während des Delays)
		else if (e.getSource() == (Timer) Ctrl_Dialogs.getInstance().getTimer_startThegame()) {
			Ctrl_Dialogs.getInstance().setCounter_startThegame((Ctrl_Dialogs.getInstance().getCounter_startThegame() + 1));
			if (Ctrl_Dialogs.getInstance().getCounter_startThegame() == 1) {
				startdialog.getBg_start().setIcon(img.getBgstart());
				startdialog.getWelcome().setVisible(true);
				startdialog.getHowmany1().setVisible(true);
				startdialog.getHowmany2().setVisible(true);
				startdialog.getButton1().setVisible(true);
				startdialog.getButton2().setVisible(true);
				startdialog.getButton3().setVisible(true);
				startdialog.getButton4().setVisible(true);
				Ctrl_Dialogs.getInstance().getTimer_startThegame().stop();
			}
		}
		//Timer_benderwalks
		//Wird nach Ablauf des eingestellten Startdelays ausgeführt (BenderWalks-Animation läuft während des Delays)
		else if (e.getSource() == (Timer) Ctrl_Dialogs.getInstance().getTimer_benderwalks()) {
			Ctrl_Dialogs.getInstance().setCounter_benderwalks((Ctrl_Dialogs.getInstance().getCounter_benderwalks() + 1));
			if (Ctrl_Dialogs.getInstance().getCounter_benderwalks() == 1) {
				//Schließt den StartstackDialog
				Ctrl_Dialogs.getInstance().closeDialog(startstackdialog);
				//Aktiviert den ersten Player
				game.setPl_on(0);
				Ctrl_MainView.getInstance().setPlayer();
				//Aktiviert den "Bet"-Button, deaktiviert alle anderen Buttons
				Main_Controller.getInstance().deactButton(0);
				Main_Controller.getInstance().deactButton(1);
				Main_Controller.getInstance().deactButton(3);
				Main_Controller.getInstance().deactButton(4);
				Main_Controller.getInstance().deactButton(5);
				Main_Controller.getInstance().actButton(2);
				//Stoppt den Timer
				Ctrl_Dialogs.getInstance().getTimer_benderwalks().stop();
			}
		}
		//TODO kann raus?
		//Timer_showNextPlayer
//		else if (e.getSource() == (Timer) Ctrl_Dialogs.getInstance().getTimer_showNextPlayer()) {
//			Ctrl_Dialogs.getInstance().setCounter_showNextPlayer((Ctrl_Dialogs.getInstance().getCounter_showNextPlayer() + 1));
//			if (Ctrl_Dialogs.getInstance().getCounter_showNextPlayer() == 1) {
//				Ctrl_Dialogs.getInstance().showDialog(InfoDialog.getInstance());
//			} else {
//				Ctrl_Dialogs.getInstance().closeDialog(InfoDialog.getInstance());
//				InfoDialog.getInstance().getNextplayer().setVisible(false);
//				Ctrl_Dialogs.getInstance().getTimer_showNextPlayer().stop();
//			}
//		} 
//		//Timer_showNextDealer
//		else if (e.getSource() == (Timer) Ctrl_Dialogs.getInstance().getTimer_showNextDealer()) {
//			Ctrl_Dialogs.getInstance().setCounter_showNextDealer((Ctrl_Dialogs.getInstance().getCounter_showNextDealer() + 1));
//			if (Ctrl_Dialogs.getInstance().getCounter_showNextDealer() == 1) {
//				Ctrl_Dialogs.getInstance().showDialog(InfoDialog.getInstance());
//			} else {
//				Ctrl_Dialogs.getInstance().closeDialog(InfoDialog.getInstance());
//				InfoDialog.getInstance().getNextplayer().setVisible(false);
//				Ctrl_Dialogs.getInstance().getTimer_showNextDealer().stop();
//				Main_Controller.getInstance().dealersMove();
//				
//			}
//		}
		//Timer_showResults
//		else if (e.getSource() == (Timer) Ctrl_Dialogs.getInstance().getTimer_showResults()) {
//			int result_p = game.getPlayers().get(game.getPl_on()).getHand().getResult();
//			int result_d = game.getDealer().getHand().getResult();
//			
//			if (Ctrl_Dialogs.getInstance().getCounter_showResults() < game.getPl_quant()) {
//				resultsdialog.getHl().setText("Result for " + game.getPlayers().get(game.getPl_on()).getName() + ":");
//				resultsdialog.getPlayerhas().setText(game.getPlayers().get(game.getPl_on()).getHand().getWhatyouhave());
//				resultsdialog.getDealerhas().setText(game.getDealer().getHand().getWhatyouhave());
//				resultsdialog.getHl().setVisible(true);
//				resultsdialog.getDealerhas().setVisible(true);
//				resultsdialog.getPlayerhas().setVisible(true);
//				resultsdialog.getResult_mainhand().setVisible(true);
//				if (result_p > 21 && result_p < 99) {
//					resultsdialog.getResult_mainhand().setText("Your main hand loses! (- " + game.getPlayers().get(game.getPl_on()).getBet() + " chips)");
//				} else if (result_p == 99) {
//					if (result_d == 99) {
//						resultsdialog.getResult_mainhand().setText("Your main hand is a draw! (+/- 0 chips)");
//					} else {
//						resultsdialog.getResult_mainhand().setText("Your main hand wins! (+ " + ((game.getPlayers().get(game.getPl_on()).getBet()/2)*3) + " chips)");
//					}
//				} else {
//					if (result_p > result_d) {
//						resultsdialog.getResult_mainhand().setText("Your main hand wins! (+ " + game.getPlayers().get(game.getPl_on()).getBet() + " chips)");
//					} else if (result_p == result_d) {
//						resultsdialog.getResult_mainhand().setText("Your main hand is a draw! (+/- 0 chips)");
//					} else {
//						if (result_d > 21 && result_d < 99) {
//							resultsdialog.getResult_mainhand().setText("Your main hand wins! (+ " + game.getPlayers().get(game.getPl_on()).getBet() + " chips)");
//						} else {
//							resultsdialog.getResult_mainhand().setText("Your main hand loses! (- " + game.getPlayers().get(game.getPl_on()).getBet() + " chips)");
//						}	
//					}
//				}
//				Ctrl_MainView.getInstance().setStack(game.getPl_on());
//				if (game.getPl_on() < (game.getPl_quant() -1)) {
//					game.setPl_on((game.getPl_on() + 1));
//				} else {
//					Ctrl_Dialogs.getInstance().getTimer_showResults().stop();
//					Ctrl_MainView.getInstance().resetTable();
//					resultsdialog.getNextround().setVisible(true);
//					resultsdialog.getQuitgame().setVisible(true);
//				}
//				//Ctrl_Dialogs.getInstance().setCounter_showResults((Ctrl_Dialogs.getInstance().getCounter_showResults() + 1));
//			} else {
//				Ctrl_Dialogs.getInstance().getTimer_showResults().stop();
//			}
//		}
		//---Timer aus Ctrl_Dialogs Ende ---
	}
}

